; (function (undefined) {
  "use strict"
  let _global;

  function isWeixin() {
    const ua = window.navigator.userAgent.toLowerCase();
    if (ua.match(/MicroMessenger/i) == 'micromessenger') {
      return true;
    } else {
      return false;
    }
  }

  /**
   * 微信支付分装-传入必要参数
   * @param {*} shareParams 
   */
  function Pay(wxpayParams = {}) {
    const { timeStamp, nonceStr, signType, paySign } = wxpayParams;
    let packageData = wxpayParams.package; 
    
    let currUrl = encodeURIComponent(location.href.split('#')[0]); //后端签名用的URL需要动态获取，并在传递的时候进行编/解码
    axios.get('/wxconfig?url=' + currUrl).then(res => {
      if (res.data.error == 1) {
        alert(res.data.msg)
        return;
      }

      // alert('wxconfig:' + JSON.stringify(res.data));
      let data = res.data.data;
      wx.config({
        debug: false,
        appId: data.appId,
        timestamp: data.timestamp,
        nonceStr: data.nonceStr,
        signature: data.signature,
        jsApiList: ['chooseWXPay','hideAllNonBaseMenuItem']
      });

      wx.ready(function () {  
        //隐藏所有非基础按钮接口 
        wx.hideAllNonBaseMenuItem();

        wx.chooseWXPay({
          timestamp:timeStamp, // 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
          nonceStr, // 支付签名随机串，不长于 32 位
          package:packageData, // 统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=\*\*\*）
          signType, // 签名方式，默认为'SHA1'，使用新版支付需传入'MD5'
          paySign, // 支付签名
          success: function (res) {
            // 支付成功后的回调函数
            window.location.href = 'success_pay.html'
          },
          fail: function(err){
            alert('payment failed:'+JSON.stringify(err))
          }
        });

      });

      wx.error(function (err) {
        alert('wx sdk err:' + JSON.stringify(err))
      });
    }).catch(error => {
      alert('get wxconfig error happend:' + JSON.stringify(error));
    });
  }

  function WxPay() { }

  WxPay.prototype.isWeixin = isWeixin
  WxPay.prototype.Pay = Pay


  _global = (function () { return this || (0, eval)('this'); }());
  if (typeof module !== "undefined" && module.exports) {
    module.exports = WxPay;
  }
  if (typeof define === "function" && define.amd) {
    define(function () { return WxPay; });
  }
  !('WxPay' in _global) && (_global.WxPay = WxPay);
}()); 